272. istio將401的錯誤,自動轉成503
WHY
這其實是蠻弔詭的狀況,
後端程式,在本地測試是回401 (Unauthorized),
但到了QA就變成了502。
這件事我也只能吞了,開始查吧。
Solution
首先查一下,什麼情況下會自動轉成503。
服務放在GKE上,並且將目標Pod的sidecar關閉。
目標的Pod為A,同Namespcae不同的Pod為B。
從哪裡呼叫 | 目標位置 | Status Code |
---|---|---|
外部 | 網址,istio 轉到A Service | 502 |
B | Pod A ip | 502 |
B | Service A ip | 502 |
A | Pod A ip | 401 |
A | Service A ip | 401 |
但如果將B的sidecar也關閉, 則在B呼叫Pod 或 Service 都會回傳401。
這邊就不由得猜想是istio本身的問題。
於是自己寫了個Golang的小程式,自訂回傳狀態碼401。
一測試發現,我從外部呼叫,Status code是正常的回傳401。
看來istio沒問題,那就只剩下程式問題(甩鍋大成功)。
用curl -v 查看 401的錯誤訊息發現header有下面訊息。
轉交給RD,請他們確認這邊的訊息。
後來改完程式後就正常了。
初步研判應該是istio判斷到 header有不明的訊息(見上圖),
觸發Retry機制,但觸發太多次,istio就直接回傳502的錯誤。